home *** CD-ROM | disk | FTP | other *** search
- /* chckstck.c
- *
- * Jerzy Tomasik, 09-Jun-1991
- *
- * Utility functions for determining unused stack space.
- * Supports Microsoft and Turbo C
- */
-
- #include <stdlib.h>
- #include <stdio.h>
-
-
- #if defined( _MSC_VER )
-
- #include <malloc.h>
-
- extern char end; /* bottom of Microsoft stack */
- static char marker = 'J'; /* "signature" byte */
-
-
- /* determine unused stack space, normally this function
- * is called at program termination, but it can be
- * called at other times.
- * Microsoft version
- */
- unsigned short unused_stack(void)
- {
- unsigned short unused = 0;
- char *ptr;
-
- ptr = &end;
-
- while(*ptr++ == marker)
- unused++;
-
- return(unused);
- }
-
-
- /* "paint" the stack with the signature byte */
- void spray_stack(void)
- {
- char *ptr, *stack_top;
-
- stack_top = &end + stackavail();
- ptr = &end;
-
- do
- {
- *ptr++ = marker;
- } while( ptr < stack_top);
-
- }
-
- #elif defined( __TURBOC__ )
-
- #include <dos.h>
-
- static char marker = 'J'; /* "signature" byte */
- static char far *bottom;
-
- /* determine unused stack space, normally this function
- * is called at program termination, but it can be
- * called at other times.
- * Turbo C version
- */
- void spray_stack(void)
- {
- char far *ptr;
-
- #if defined( __SMALL__ ) || defined( __MEDIUM__ )
-
- extern unsigned int _stklen;
-
- ptr = (char *) MK_FP( _DS, (_SP - 0x100));
- bottom = (char *) MK_FP( _DS, (0xFFFF - _stklen));
-
- #elif defined( __COMPACT__ ) || defined( __LARGE__ )
-
- ptr = (char *) MK_FP( _SS, (_SP - 0x100));
- bottom = (char *) MK_FP( _SS, 0x00 );
-
- #endif
-
- for( ; ptr > bottom; *ptr-- = marker )
- ;
-
- }
-
- unsigned short unused_stack(void)
- {
- unsigned short unused = 0;
- char far *ptr;
-
- ptr = bottom + 1;
-
- while(*ptr++ == marker)
- unused++;
-
- return(unused);
- }
-
- #endif
-